package com.shujia;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcDemo1 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement state = null;
        /**
         *  jdk中提供了一个类来帮助我们注册驱动，并告诉java是要连接哪一种数据库。这个类：DriverManager
         *  通过观察后发现，这个类是没有构造方法的，只有静态的方法，这个是工具类，是专门用于管理一组JDBC驱动程序的基本服务的工具类。
         *  其中有一个静态方法：
         *      static void registerDriver(Driver driver)  注册与给定的驱动程序 DriverManager 。
         *  再观察后发现，这个方法中是需要传入一个Driver的接口实现类对象，经过分析后得出，不同的数据库驱动包中应该存在对应的实现类。
         *  将来要去使用何种数据库，就应该去对应的驱动包中找对应的实现类。
         *  现在要连接mysql，所以去mysql的驱动包中找Driver的实现类，在mysql驱动包中的com.mysql.jdbc.Driver
         */
        try {
            //1.注册驱动（告诉Java程序，即将连接的是哪个品牌的数据库）
            DriverManager.registerDriver(new Driver());
            //2.获取连接（表示JVM的进程和数据库进程之间的通道打开了，这属于进程之间的通信，使用完后记得关闭通道）。
            /**
             * public static Connection getConnection(String url, String user, String password)
             * url: 超文本传输协议
             *      jdbc:mysql://192.168.21.100:3306?useUnicode=true&characterEncoding=UTF-8
             * user: root
             * password: 123456
             */
            //mysql5.7+的版本不建议外部用户直接与mysql服务器直接连接
//            String url = "jdbc:mysql://192.168.205.129:3306/myrepository?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
//            String user = "root";
//            String password = "123456";
//            conn = DriverManager.getConnection(url, user, password);
            conn = MysqlTools.getConnection();
            System.out.println("数据库连接成功："+conn);

            //3.获取数据库操作对象（专门执行sql语句的对象）
            //Statement createStatement() 创建一个 Statement对象，用于将SQL语句发送到数据库。
            state = conn.createStatement();

            //4.执行SQL语句（DQL,DML…）
            /**
             * Statement接口中有两个方法：
             * ResultSet executeQuery(String sql)  执行给定的SQL语句，该语句返回单个 ResultSet对象。  查询  另一大类操作
             * int executeUpdate(String sql)  执行给定的SQL语句，这可能是 INSERT ， UPDATE ，或 DELETE语句，或者不返回任何内容，如SQL DDL语句的SQL语句
             */
            String sql = "insert into goods values(1002,'iphone15 pro',8999,'京东苹果自营店')";
            int number = state.executeUpdate(sql); // 返回的是受影响的行数
            if(number==1){
                System.out.println("数据添加成功！！");
            }else {
                System.out.println("数据添加失败！！");
            }


        }catch (Exception e){
            e.printStackTrace();
        }finally {

            if(state!=null){
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn!=null){
                try {
                    //关闭连接，释放资源
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }


    }
}
